package com.lpf.mybatis.config;

import com.lpf.mybatis.beans.Test;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 功能描述：在这里保存 statementId -> sql
 *
 * 这里保存 *Mapper.xml 配置文件的信息
 */
@SuppressWarnings("all")
public class MapperRegistry {

    // statement id -> (sql 和 type)
    public static final Map<String, MapperData> methodSqlMapping = new HashMap<>();

    // 1、在这里配置
    // 2、Java Bean的属性名字要和数据库表的名字一致
    public MapperRegistry() {
        methodSqlMapping.put("com.lpf.mybatis.config.mappers.TestMapper.selectByPrimaryKey", new MapperData("select * from test where id = %d", Test.class));
    }

    @Data
    public class MapperData<T> {

        private String sql;     // 要执行的sql语句
        private Class<T> type;  // 从数据库返回数据后将要封装的类型

        public MapperData(String sql, Class<T> type) {
            this.sql = sql;
            this.type = type;
        }
    }

    public MapperData get(String statementId) {
        return methodSqlMapping.get(statementId);
    }
}
